package iso2.pruebas;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import iso2.dominio.Articulo;
import iso2.persistencia.Agente;
import iso2.persistencia.ConexionesOcupadasException;
import junit.framework.TestCase;

public class TestAnadirArticulo extends TestCase {

	private Connection conexion;
	private Agente agente;

	/* Articulos */
//	private Articulo noStock;
	private Articulo enStock;
//	private Articulo noActivo;
	private Articulo noExistente;

	protected void setUp() {

//		noStock = new Articulo(1, "articulo1", 1, "articulo1", "", "", 0, true);
		enStock = new Articulo(2, "articulo2", 1, "articulo2", "", "", 1, true);
		noExistente = new Articulo(4, "articulo3", 1, "articulo3", "", "", 1, true);

		agente = Agente.getInstancia();
		try {
			conexion = agente.getConexion();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ConexionesOcupadasException e) {
			e.printStackTrace();
		}
	}

	protected void tearDown() {
		agente.liberarConexion(conexion);
	}

	public void testAnadirPersistencia_ok() {
		/*
		 * Si el método no funciona tirará una excepción y no debe hacerlo. Es un
		 * oraculo en positvo
		 */
		try {
			noExistente.insertArticulo();
			PreparedStatement sentencia = conexion
					.prepareStatement("select * from articulo where referencia = ?;");

			sentencia.setInt(1, noExistente.getReferencia());

			ResultSet resultado = sentencia.executeQuery();
			assertTrue("Comprobamos articulo en la bd", resultado.next());
		} catch (SQLException e) {
			fail(e.toString());
		} catch (ConexionesOcupadasException e) {
			fail(e.toString());
		}catch (Exception e) {
			fail(e.toString());
		}

	}

	public void testAnadirPersistencia_Existente() {
		/*
		 * Si el método no funciona tirará una excepción y no debe hacerlo Es un
		 * oraculo en positvo
		 */
		try {
			enStock.insertArticulo();
			fail("Esperaba excepción");
		}
		
		catch (SQLException e) {}
		
		catch (ConexionesOcupadasException e) {
			fail(e.toString());
		}
		
		catch (Exception e) {
			fail(e.toString());
		}

	}

}